/*
 * @Author: 晟松
 * @Date: 2021-12-07 23:09:10
 * @LastEditors: 晟松
 * @LastEditTime: 2022-02-28 19:40:29
 * @FilePath: \mini-vue3d:\Code\node\koa2\volunteer-service\src\main\model\Vol.js
 * @Description: 志愿服务的模型
 */
import Sequelize from "sequelize";
import { isValidateEnum } from "@main/util/ValidateUtil";
import { ParamError } from "../common/CommonError";

export const modelName = "vol";

const DataTypes = Sequelize.DataTypes;

export const attributes = {
    // 服务状态
    state: {
        type: DataTypes.INTEGER,
        allowNull: false,
        validate: {
            check(val) {
                if (!isValidateEnum(val, "state")) {
                    throw new ParamError(`state: ${val}值错误`);
                }
            },
        },
    },
    time: {
        type: DataTypes.DATE,
        allowNull: false,
    },
    duration: {
        type: DataTypes.FLOAT,
    },
    timeIntegral: DataTypes.INTEGER, // 时间积分数
    place: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    title: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    event: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    demand: DataTypes.STRING, // 要求
    img: DataTypes.STRING,
    /* 志愿服务可能会上传图片，所以需要存储图片存在七牛云的地址，如：http://qiniu.chengsong.info/54.jpg，
    注意这是在js中对数组进行处理后存入的string值，如：'http://qiniu.chengsong.info/54.jpg|http://qiniu.chengsong.info/542.jpg' 
    注意中间的 '|' 符号,使用了arr.join('|')方法，便会数组需要使用split('|')方法*/
    feedback: DataTypes.STRING,
    evaluation: DataTypes.STRING, // 评价
    evaluationScore: DataTypes.INTEGER,
    reviewOpinion: DataTypes.STRING, // 居委会的审核意见
    // 发起者身份
    initiatorIdentity: {
        type: DataTypes.INTEGER,
        validate: {
            check(val) {
                if (!isValidateEnum(val, "identity")) {
                    throw new ParamError(`initiatorIdentity: ${val}值错误`);
                }
            },
        },
    },
    // 领取者身份
    recipientIdentity: {
        type: DataTypes.INTEGER,
        validate: {
            check(val) {
                if (!isValidateEnum(val, "identity")) {
                    throw new ParamError(`recipientIdentity: ${val}值错误`);
                }
            },
        },
    },
    // 这两个键可能是学生id，也可能是居民id，不好建立关系，需要手动维护
    initiatorId: {
        type: DataTypes.INTEGER,
    },
    recipientId: {
        type: DataTypes.INTEGER,
    },
    // 领取时间
    recipientTime: {
        type: DataTypes.DATE,
    },
    // 这两个是关于区块链的一个记录，主要是记录其中的交易hash和块hash，通过这两个hash就可从区块链中获取到对应的信息
    transactionHash: DataTypes.STRING,
    blockHash: DataTypes.STRING,
};

export const options = {
    // tableName: "t_user_reference",
};
